home *** CD-ROM | disk | FTP | other *** search
- package mx.core
- {
- import flash.display.DisplayObject;
- import flash.display.Graphics;
- import flash.display.Shape;
- import flash.events.Event;
- import flash.events.MouseEvent;
- import flash.geom.Point;
- import mx.controls.HScrollBar;
- import mx.controls.ToolTip;
- import mx.controls.VScrollBar;
- import mx.controls.scrollClasses.ScrollBar;
- import mx.events.ScrollEvent;
- import mx.events.ScrollEventDetail;
- import mx.events.ScrollEventDirection;
- import mx.managers.ToolTipManager;
- import mx.skins.RectangularBorder;
- import mx.styles.ISimpleStyleClient;
-
- use namespace mx_internal;
-
- public class ScrollControlBase extends UIComponent
- {
- mx_internal static const VERSION:String = "2.0.1.0";
-
- protected var maskShape:Shape;
-
- protected var border:IFlexDisplayObject;
-
- protected var scrollAreaChanged:Boolean;
-
- private var _viewMetrics:EdgeMetrics;
-
- private var numberOfRows:Number = 0;
-
- private var viewableColumns:Number;
-
- private var _scrollTipFunction:Function;
-
- private var numberOfCols:Number = 0;
-
- private var oldTTMEnabled:Boolean;
-
- mx_internal var _maxHorizontalScrollPosition:Number;
-
- public var liveScrolling:Boolean = true;
-
- private var scrollThumbMidPoint:Number;
-
- protected var horizontalScrollBar:ScrollBar;
-
- private var invLayout:Boolean;
-
- public var showScrollTips:Boolean = false;
-
- private var scrollTip:ToolTip;
-
- mx_internal var _maxVerticalScrollPosition:Number;
-
- protected var verticalScrollBar:ScrollBar;
-
- private var propsInited:Boolean;
-
- mx_internal var _verticalScrollPosition:Number = 0;
-
- private var specialHScrollCase:Boolean;
-
- mx_internal var _horizontalScrollPosition:Number = 0;
-
- mx_internal var _horizontalScrollPolicy:String = "off";
-
- mx_internal var _verticalScrollPolicy:String = "auto";
-
- private var viewableRows:Number;
-
- public function ScrollControlBase()
- {
- numberOfCols = 0;
- numberOfRows = 0;
- mx_internal::_horizontalScrollPosition = 0;
- mx_internal::_horizontalScrollPolicy = ScrollPolicy.OFF;
- liveScrolling = true;
- showScrollTips = false;
- mx_internal::_verticalScrollPosition = 0;
- mx_internal::_verticalScrollPolicy = ScrollPolicy.AUTO;
- super();
- _viewMetrics = EdgeMetrics.EMPTY;
- addEventListener(MouseEvent.MOUSE_WHEEL,mouseWheelHandler);
- }
-
- protected function setScrollBarProperties(param1:int, param2:int, param3:int, param4:int) : void
- {
- var _loc5_:String = null;
- var _loc6_:String = null;
- _loc5_ = this.horizontalScrollPolicy;
- _loc6_ = this.verticalScrollPolicy;
- scrollAreaChanged = false;
- if(_loc5_ == ScrollPolicy.ON || param2 < param1 && param1 > 0 && _loc5_ == ScrollPolicy.AUTO)
- {
- if(!horizontalScrollBar || specialHScrollCase)
- {
- specialHScrollCase = false;
- if(!horizontalScrollBar)
- {
- if(createHScrollBar())
- {
- horizontalScrollBar.visible = false;
- horizontalScrollBar.addEventListener(ScrollEvent.SCROLL,scrollHandler);
- horizontalScrollBar.addEventListener(ScrollEvent.SCROLL,scrollTipHandler);
- horizontalScrollBar.scrollPosition = mx_internal::_horizontalScrollPosition;
- scrollAreaChanged = true;
- }
- }
- }
- if(Boolean(horizontalScrollBar) && (numberOfCols != param1 || viewableColumns != param2 || scrollAreaChanged))
- {
- horizontalScrollBar.setScrollProperties(param2,0,param1 - param2);
- if(horizontalScrollBar.scrollPosition != mx_internal::_horizontalScrollPosition)
- {
- horizontalScrollBar.scrollPosition = mx_internal::_horizontalScrollPosition;
- }
- viewableColumns = param2;
- numberOfCols = param1;
- }
- }
- else if((_loc5_ == ScrollPolicy.AUTO || _loc5_ == ScrollPolicy.OFF) && Boolean(horizontalScrollBar))
- {
- horizontalScrollPosition = 0;
- removeChild(horizontalScrollBar);
- horizontalScrollBar = null;
- viewableColumns = NaN;
- scrollAreaChanged = true;
- }
- if(_loc6_ == ScrollPolicy.ON || param4 < param3 && param3 > 0 && _loc6_ == ScrollPolicy.AUTO)
- {
- if(!verticalScrollBar)
- {
- if(createVScrollBar())
- {
- verticalScrollBar.visible = false;
- verticalScrollBar.addEventListener(ScrollEvent.SCROLL,scrollHandler);
- verticalScrollBar.addEventListener(ScrollEvent.SCROLL,scrollTipHandler);
- verticalScrollBar.scrollPosition = mx_internal::_verticalScrollPosition;
- scrollAreaChanged = true;
- }
- }
- if(Boolean(verticalScrollBar) && (numberOfRows != param3 || viewableRows != param4 || scrollAreaChanged))
- {
- verticalScrollBar.setScrollProperties(param4,0,param3 - param4);
- if(verticalScrollBar.scrollPosition != mx_internal::_verticalScrollPosition)
- {
- verticalScrollBar.scrollPosition = mx_internal::_verticalScrollPosition;
- }
- viewableRows = param4;
- numberOfRows = param3;
- }
- }
- else if((_loc6_ == ScrollPolicy.AUTO || _loc6_ == ScrollPolicy.OFF) && Boolean(verticalScrollBar))
- {
- verticalScrollPosition = 0;
- removeChild(verticalScrollBar);
- verticalScrollBar = null;
- viewableRows = NaN;
- scrollAreaChanged = true;
- }
- if(scrollAreaChanged)
- {
- updateDisplayList(unscaledWidth,unscaledHeight);
- }
- }
-
- [Bindable("viewChanged")]
- [Bindable("scroll")]
- public function get verticalScrollPosition() : Number
- {
- return mx_internal::_verticalScrollPosition;
- }
-
- protected function createBorder() : void
- {
- var _loc1_:Class = null;
- if(!border && isBorderNeeded())
- {
- _loc1_ = getStyle("borderSkin");
- border = new _loc1_();
- if(border is IUIComponent)
- {
- IUIComponent(border).enabled = enabled;
- }
- if(border is ISimpleStyleClient)
- {
- ISimpleStyleClient(border).styleName = this;
- }
- addChildAt(DisplayObject(border),0);
- invalidateDisplayList();
- }
- }
-
- [Bindable("viewChanged")]
- [Bindable("scroll")]
- public function get horizontalScrollPosition() : Number
- {
- return mx_internal::_horizontalScrollPosition;
- }
-
- private function createVScrollBar() : ScrollBar
- {
- var _loc1_:EdgeMetrics = null;
- var _loc2_:VScrollBar = null;
- var _loc3_:String = null;
- _loc1_ = borderMetrics;
- _loc2_ = new VScrollBar();
- if(unscaledWidth >= _loc2_.minWidth + _loc1_.left + _loc1_.right)
- {
- verticalScrollBar = _loc2_;
- verticalScrollBar.enabled = enabled;
- _loc3_ = getStyle("verticalScrollBarStyleName");
- verticalScrollBar.styleName = _loc3_;
- addChild(verticalScrollBar);
- }
- return verticalScrollBar;
- }
-
- [Bindable("scrollTipFunctionChanged")]
- public function get scrollTipFunction() : Function
- {
- return _scrollTipFunction;
- }
-
- public function set verticalScrollPosition(param1:Number) : void
- {
- mx_internal::_verticalScrollPosition = param1;
- if(verticalScrollBar)
- {
- verticalScrollBar.scrollPosition = param1;
- }
- dispatchEvent(new Event("viewChanged"));
- }
-
- private function createHScrollBar() : ScrollBar
- {
- var _loc1_:EdgeMetrics = null;
- var _loc2_:HScrollBar = null;
- var _loc3_:String = null;
- _loc1_ = borderMetrics;
- _loc2_ = new HScrollBar();
- if(unscaledHeight >= _loc2_.minHeight + _loc1_.top + _loc1_.bottom)
- {
- horizontalScrollBar = _loc2_;
- horizontalScrollBar.enabled = enabled;
- _loc3_ = getStyle("horizontalScrollBarStyleName");
- horizontalScrollBar.styleName = _loc3_;
- addChild(horizontalScrollBar);
- horizontalScrollBar.validateNow();
- }
- return horizontalScrollBar;
- }
-
- [Bindable("horizontalScrollPolicyChanged")]
- public function get horizontalScrollPolicy() : String
- {
- return mx_internal::_horizontalScrollPolicy;
- }
-
- public function set horizontalScrollPosition(param1:Number) : void
- {
- mx_internal::_horizontalScrollPosition = param1;
- if(horizontalScrollBar)
- {
- horizontalScrollBar.scrollPosition = param1;
- }
- dispatchEvent(new Event("viewChanged"));
- }
-
- private function scrollTipHandler(param1:Event) : void
- {
- var _loc2_:ScrollBar = null;
- var _loc3_:* = false;
- var _loc4_:String = null;
- var _loc5_:Number = NaN;
- var _loc6_:String = null;
- var _loc7_:Point = null;
- if(param1 is ScrollEvent)
- {
- if(!showScrollTips)
- {
- return;
- }
- if(ScrollEvent(param1).detail == ScrollEventDetail.THUMB_POSITION)
- {
- if(scrollTip)
- {
- systemManager.toolTipChildren.removeChild(scrollTip);
- scrollTip = null;
- ToolTipManager.enabled = oldTTMEnabled;
- }
- }
- else if(ScrollEvent(param1).detail == ScrollEventDetail.THUMB_TRACK)
- {
- _loc2_ = ScrollBar(param1.target);
- _loc3_ = _loc2_ == verticalScrollBar;
- _loc4_ = _loc3_ ? "vertical" : "horizontal";
- _loc5_ = _loc2_.scrollPosition;
- if(!scrollTip)
- {
- scrollTip = new ToolTip();
- systemManager.toolTipChildren.addChild(scrollTip);
- scrollThumbMidPoint = _loc2_.mx_internal::scrollThumb.height / 2;
- oldTTMEnabled = ToolTipManager.enabled;
- ToolTipManager.enabled = false;
- }
- _loc6_ = _loc5_.toString();
- if(_scrollTipFunction != null)
- {
- _loc6_ = _scrollTipFunction(_loc4_,_loc5_);
- }
- if(_loc6_ == "")
- {
- scrollTip.visible = false;
- }
- else
- {
- scrollTip.text = _loc6_;
- ToolTipManager.mx_internal::sizeTip(scrollTip);
- _loc7_ = new Point();
- if(_loc3_)
- {
- _loc7_.x = -3 - scrollTip.width;
- _loc7_.y = _loc2_.mx_internal::scrollThumb.y + scrollThumbMidPoint - scrollTip.height / 2;
- }
- else
- {
- _loc7_.x = -3 - scrollTip.height;
- _loc7_.y = _loc2_.mx_internal::scrollThumb.y + scrollThumbMidPoint - scrollTip.width / 2;
- }
- _loc7_ = _loc2_.localToGlobal(_loc7_);
- scrollTip.move(_loc7_.x,_loc7_.y);
- scrollTip.visible = true;
- }
- }
- }
- }
-
- protected function mouseWheelHandler(param1:MouseEvent) : void
- {
- var _loc2_:int = 0;
- var _loc3_:Number = NaN;
- var _loc4_:Number = NaN;
- var _loc5_:ScrollEvent = null;
- if(verticalScrollBar)
- {
- param1.stopPropagation();
- _loc2_ = param1.delta <= 0 ? 1 : -1;
- _loc3_ = Math.max(Math.abs(param1.delta),verticalScrollBar.lineScrollSize);
- _loc4_ = verticalScrollPosition;
- verticalScrollPosition += 3 * _loc3_ * _loc2_;
- _loc5_ = new ScrollEvent(ScrollEvent.SCROLL);
- _loc5_.direction = ScrollEventDirection.VERTICAL;
- _loc5_.position = verticalScrollPosition;
- _loc5_.delta = verticalScrollPosition - _loc4_;
- dispatchEvent(_loc5_);
- }
- }
-
- [Bindable("verticalScrollPolicyChanged")]
- public function get verticalScrollPolicy() : String
- {
- return mx_internal::_verticalScrollPolicy;
- }
-
- public function set scrollTipFunction(param1:Function) : void
- {
- _scrollTipFunction = param1;
- dispatchEvent(new Event("scrollTipFunctionChanged"));
- }
-
- public function set horizontalScrollPolicy(param1:String) : void
- {
- var _loc2_:String = null;
- _loc2_ = param1.toLowerCase();
- if(mx_internal::_horizontalScrollPolicy != _loc2_)
- {
- mx_internal::_horizontalScrollPolicy = _loc2_;
- invalidateDisplayList();
- dispatchEvent(new Event("horizontalScrollPolicyChanged"));
- }
- }
-
- private function isBorderNeeded() : Boolean
- {
- var _loc1_:Object = null;
- _loc1_ = getStyle("borderStyle");
- if(_loc1_)
- {
- if(_loc1_ != "none" || _loc1_ == "none" && getStyle("mouseShield"))
- {
- return true;
- }
- }
- _loc1_ = getStyle("backgroundColor");
- if(_loc1_ !== null && _loc1_ !== "")
- {
- return true;
- }
- _loc1_ = getStyle("backgroundImage");
- return _loc1_ != null && _loc1_ != "";
- }
-
- public function set maxVerticalScrollPosition(param1:Number) : void
- {
- mx_internal::_maxVerticalScrollPosition = param1;
- dispatchEvent(new Event("maxVerticalScrollPositionChanged"));
- }
-
- [Bindable("maxHorizontalScrollPositionChanged")]
- public function get maxHorizontalScrollPosition() : Number
- {
- var _loc1_:Number = NaN;
- if(!isNaN(mx_internal::_maxHorizontalScrollPosition))
- {
- return mx_internal::_maxHorizontalScrollPosition;
- }
- return !!horizontalScrollBar ? horizontalScrollBar.maxScrollPosition : 0;
- }
-
- public function set verticalScrollPolicy(param1:String) : void
- {
- var _loc2_:String = null;
- _loc2_ = param1.toLowerCase();
- if(mx_internal::_verticalScrollPolicy != _loc2_)
- {
- mx_internal::_verticalScrollPolicy = _loc2_;
- invalidateDisplayList();
- dispatchEvent(new Event("verticalScrollPolicyChanged"));
- }
- }
-
- mx_internal function get scroll_horizontalScrollBar() : ScrollBar
- {
- return horizontalScrollBar;
- }
-
- protected function layoutChrome(param1:Number, param2:Number) : void
- {
- if(border)
- {
- border.move(0,0);
- border.setActualSize(param1,param2);
- }
- }
-
- mx_internal function get scroll_verticalScrollBar() : ScrollBar
- {
- return verticalScrollBar;
- }
-
- public function get viewMetrics() : EdgeMetrics
- {
- _viewMetrics = borderMetrics.clone();
- if(!horizontalScrollBar && horizontalScrollPolicy == ScrollPolicy.ON)
- {
- if(createHScrollBar())
- {
- horizontalScrollBar.addEventListener(ScrollEvent.SCROLL,scrollHandler);
- horizontalScrollBar.addEventListener(ScrollEvent.SCROLL,scrollTipHandler);
- horizontalScrollBar.scrollPosition = mx_internal::_horizontalScrollPosition;
- specialHScrollCase = true;
- invalidateDisplayList();
- }
- }
- if(!verticalScrollBar && verticalScrollPolicy == ScrollPolicy.ON)
- {
- if(createVScrollBar())
- {
- verticalScrollBar.addEventListener(ScrollEvent.SCROLL,scrollHandler);
- verticalScrollBar.addEventListener(ScrollEvent.SCROLL,scrollTipHandler);
- verticalScrollBar.scrollPosition = mx_internal::_verticalScrollPosition;
- invalidateDisplayList();
- }
- }
- if(verticalScrollBar)
- {
- _viewMetrics.right += verticalScrollBar.minWidth;
- }
- if(horizontalScrollBar)
- {
- _viewMetrics.bottom += horizontalScrollBar.minHeight;
- }
- return _viewMetrics;
- }
-
- override public function set enabled(param1:Boolean) : void
- {
- super.enabled = param1;
- if(horizontalScrollBar)
- {
- horizontalScrollBar.enabled = param1;
- }
- if(verticalScrollBar)
- {
- verticalScrollBar.enabled = param1;
- }
- }
-
- [Bindable("maxVerticalScrollPositionChanged")]
- public function get maxVerticalScrollPosition() : Number
- {
- var _loc1_:Number = NaN;
- if(!isNaN(mx_internal::_maxVerticalScrollPosition))
- {
- return mx_internal::_maxVerticalScrollPosition;
- }
- return !!verticalScrollBar ? verticalScrollBar.maxScrollPosition : 0;
- }
-
- override protected function createChildren() : void
- {
- var _loc1_:Graphics = null;
- super.createChildren();
- createBorder();
- if(!maskShape)
- {
- maskShape = new FlexShape();
- maskShape.name = "mask";
- _loc1_ = maskShape.graphics;
- _loc1_.beginFill(16777215);
- _loc1_.drawRect(0,0,10,10);
- _loc1_.endFill();
- addChild(maskShape);
- }
- maskShape.visible = false;
- }
-
- public function get borderMetrics() : EdgeMetrics
- {
- return Boolean(border) && border is RectangularBorder ? RectangularBorder(border).borderMetrics : EdgeMetrics.EMPTY;
- }
-
- protected function scrollHandler(param1:Event) : void
- {
- var _loc2_:ScrollBar = null;
- var _loc3_:Number = NaN;
- var _loc4_:QName = null;
- if(param1 is ScrollEvent)
- {
- _loc2_ = ScrollBar(param1.target);
- _loc3_ = _loc2_.scrollPosition;
- if(_loc2_ == verticalScrollBar)
- {
- _loc4_ = new QName(mx_internal,"_verticalScrollPosition");
- }
- else if(_loc2_ == horizontalScrollBar)
- {
- _loc4_ = new QName(mx_internal,"_horizontalScrollPosition");
- }
- dispatchEvent(param1);
- if(_loc4_)
- {
- this[_loc4_] = _loc3_;
- }
- }
- }
-
- override public function styleChanged(param1:String) : void
- {
- var _loc2_:Boolean = false;
- var _loc3_:String = null;
- var _loc4_:String = null;
- _loc2_ = param1 == null || param1 == "styleName";
- super.styleChanged(param1);
- if(_loc2_ || param1 == "horizontalScrollBarStyleName")
- {
- if(horizontalScrollBar)
- {
- _loc3_ = getStyle("horizontalScrollBarStyleName");
- horizontalScrollBar.styleName = _loc3_;
- }
- }
- if(_loc2_ || param1 == "verticalScrollBarStyleName")
- {
- if(verticalScrollBar)
- {
- _loc4_ = getStyle("verticalScrollBarStyleName");
- verticalScrollBar.styleName = _loc4_;
- }
- }
- }
-
- public function set maxHorizontalScrollPosition(param1:Number) : void
- {
- mx_internal::_maxHorizontalScrollPosition = param1;
- dispatchEvent(new Event("maxHorizontalScrollPositionChanged"));
- }
-
- override protected function updateDisplayList(param1:Number, param2:Number) : void
- {
- var _loc3_:Number = NaN;
- var _loc4_:Number = NaN;
- var _loc5_:EdgeMetrics = null;
- var _loc6_:DisplayObject = null;
- var _loc7_:Number = NaN;
- var _loc8_:Number = NaN;
- super.updateDisplayList(param1,param2);
- layoutChrome(param1,param2);
- if(verticalScrollBar == null && verticalScrollPolicy == ScrollPolicy.ON)
- {
- if(createVScrollBar())
- {
- verticalScrollBar.addEventListener(ScrollEvent.SCROLL,scrollHandler);
- verticalScrollBar.addEventListener(ScrollEvent.SCROLL,scrollTipHandler);
- verticalScrollBar.scrollPosition = mx_internal::_verticalScrollPosition;
- }
- }
- _loc3_ = param1;
- _loc4_ = param2;
- invLayout = false;
- _loc5_ = _viewMetrics = viewMetrics;
- if(horizontalScrollBar)
- {
- horizontalScrollBar.setActualSize(_loc3_ - _loc5_.left - _loc5_.right,horizontalScrollBar.minHeight);
- horizontalScrollBar.move(_loc5_.left,_loc4_ - _loc5_.bottom);
- horizontalScrollBar.visible = horizontalScrollBar.width >= horizontalScrollBar.minWidth && _loc4_ > horizontalScrollBar.height;
- horizontalScrollBar.enabled = enabled;
- }
- if(verticalScrollBar)
- {
- verticalScrollBar.setActualSize(verticalScrollBar.minWidth,_loc4_ - _loc5_.top - _loc5_.bottom);
- verticalScrollBar.move(_loc3_ - _loc5_.right,_loc5_.top);
- verticalScrollBar.visible = verticalScrollBar.height >= verticalScrollBar.minHeight && _loc3_ > verticalScrollBar.width;
- verticalScrollBar.enabled = enabled;
- }
- _loc6_ = maskShape;
- _loc7_ = _loc3_ - _loc5_.left - _loc5_.right;
- _loc8_ = _loc4_ - _loc5_.top - _loc5_.bottom;
- _loc6_.width = _loc7_ < 0 ? 0 : _loc7_;
- _loc6_.height = _loc8_ < 0 ? 0 : _loc8_;
- _loc6_.x = _loc5_.left;
- _loc6_.y = _loc5_.top;
- }
- }
- }
-
-